Zurück

Controller-Dokumentation

Versionen

Im Laufe des Projekts traten vermehrt Probleme mit der zuerst eingesetzten Hardware. Daher wurde neue Hardware angeschafft. Die ursprüngliche Hardware ist nun als Version 0.1 zu sehen. Die neue Hardware ist als Version 0.2 einzusehen. Die genutzte Infrastruktur ist für beide Versionen identisch.

Einleitung

Dieser Teil des Projekts beschäftigt sich mit der Steuerung von 3D-Objekten im Web. Dabei soll die Steuerung konkret mit einem Mikrokontroller und einem Beschleunigungssensor umgesetzt werden, sodass man diese Steuerung auch ohne eine App auf einem Smartphone oder einem Browser realisieren kann. Diese Dokumentation soll dazu dienen, die nötigen Schritte zum Nachbau zu liefern. Dabei wird sowohl der Controller genauer erläutert, als auch die Infrastruktur, in der der Controller in diesem Projekt genutzt wird.

Bisher genutzte Sensor-Eigenschaften

Bisher wird der Controller lediglich zum drehen des 3D-Objektes genutzt. Ein verschieben ist bis dato nicht erwünscht und wurde daher noch nicht implementiert. Zum drehen des Objektes bieten sich zwei Eigenschaften des Sensors. Zum einen kann man die Gyroskop-Werte nutzen, um die momentane Veränderung festzustellen und diese übertragen. Das 3D-Modell wird in ThreeJS dann um diese Werte (jeweils zwischen 0 und 1) gedreht. Die Zweite Möglichkeit ist das Messen der aktuellen Lage durch eine Winkelmessung. Hierbei wird dann das Objekt nicht mehr rotiert, sondern in eine bestimmte Stellung versetzt. Aktuell werden die Gyroskop-Werte genutzt.

Der Controller

Version 0.2

Mit dieser Version wurde der Gyroskop-Sensor und der Microcontroller ersetzt. Das sollte die mangelhafte System-Stabilität erheblich verbessern. Außerdem wurde aus den gleichen Gründen das Display inkl. Button-Schaltung entfernt.

Hardware

Die unten gelistete Hardware wurde für den zweiten Prototypen eingesetzt. Das dazugehörige Schaltbild zeigt die genaue Zusammenstellung

Hardware Nutzen
Adafruit HUZZAH32 Feather Microcontroller
Bosch BNO055 9-Achsen Beschleunigungssensor
Zusammenbau

Um den Controller möglichst einfach nachzubauen, wurde mit der Open-Source-Software Fritzing ein Steckplatine nachgebaut. Diese ist nahezu identisch dem Orginal. Steckplatine des Controllers V0.2

Software

Die Software des Microcontrollers wurde mit der Arduino IDE in der Sprache C geschrieben. Um den Microcontroller und die genutzten Bausteine zu benutzen, werden mehrere Bibliotheken benötigt:

Bibliothek Nutzen Link
ESP32 Bibliothekt stellt Board-Konfigurationen für ESP32-Boards bereit Github Repo
ArduinoJSON erstellen & lesen von JSON-Nachrichten in Arduino IDE ladbar
Adafruit BNO055 9-Achsen Sensor in Arduino IDE ladbar
Adafruit Sensoren Hilfsbibliothek für Adafruit-Sensoren Github Repo
WebSockets WebSocket-Verbindung in Arduino IDE ladbar

Version 0.1

Hardware

Die unten gelistete Hardware wurde für den ersten Prototypen eingesetzt. Das dazugehörige Schaltbild zeigt die genaue Zusammenstellung.

Hardware Nutzen
Wemos Lolin32 Light Microcontroller
GY-521 9-Achsen Beschleunigungssensor
SSD1306 OLED-Display
2x Button Benötigt, um auf dem Display die Seiten durchzuschalten
2x 10k Ohm Wiederstand Benötigt für Button-Schaltung
Zusammenbau

Um den Controller möglichst einfach nachzubauen, wurde mit der Open-Source-Software Fritzing ein Steckplatine nachgebaut. Diese ist nahezu identisch dem Orginal. Steckplatine des Controllers

Software

Die Software des Microcontrollers wurde mit der Arduino IDE in der Sprache C geschrieben. Um den Microcontroller und die genutzten Bausteine zu benutzen, werden mehrere Bibliotheken benötigt:

Bibliothek Nutzen Link
ESP32 Bibliothekt stellt Board-Konfigurationen für ESP32-Boards bereit Github Repo
Adafruit SSD1306 Display in Arduino IDE ladbar
ArduinoJSON erstellen & lesen von JSON-Nachrichten in Arduino IDE ladbar
MPU6050_tockn 9-Achsen Sensor in Arduino IDE ladbar
WebSockets WebSocket-Verbindung in Arduino IDE ladbar

Die genutzte Infrastruktur

Da der ESP32-Controller keine SSL-Verbindung aufbauen kann, wird für den Controller ein eigenes WLAN benötigt. Dieses wird in diesem Projekt durch eine kleinen Linux-PC realisiert. Dieser PC besitzt mehrere Komponenten und Konfigurationen, um die Nutzungsmöglichkeiten möglichst wenig einzuschränken. Zum einen hostet der Linux-PC einen apache-Webserver mit den anzuzeigenden 3D-Modellen und deren Präsentationsseiten (html & JavaScript). Da dieser PC als Bridge konfiguriert wurde, können dadurch alle anderen Teilnehmer des eth0 Netzwerkes auch diese Präsentationsseiten aufrufen. Die IP-Adresse des Linux-PCs bezieht er für eth0 vom jeweiligen DHCP-Server. Als zweite Komponente baut der Linux-PC ein WLAN auf, und hostet dafür einen eigenen DHCP-Server. Die Internetverbindung aus dem eth0 Anschluss wird dabei durchgeroutet. In diesem neuen Netzwerk ist der Linux-PC unter 192.168.1.1 erreichbar. Als letzte Komponente hostet der Linux-PC einen WebSocketServer über eine NodeJS Anwendung. Dieser WebSocketServer ist von beiden Netzwerken erreichbar und kann zwischen diesen kommunizieren. Dadurch können Präsentationsseiten sich aus dem eth0 Netzwerk dort anmelden und die Update-Nachrichten vom Controller aus dem WLAN erhalten. Eben jene Konfiguration ist im unteren Schaubild dargestellt.
Netzwerkdiagramm

Github-Repository des Controllers
https://github.com/knigh7m4r3/dh2018-controller